/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package provaserializzazione;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import java.io.Serializable;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.*;
/**
 *
 * @author Francesco
 */
public class Utente implements Serializable {
    private static final long serialVersionUID = 1L;
    private int id;
    private char sesso;
    private Map<Integer, Double> voti;
    
    
    /**
     *Costrutture che inizializza un utente
     **/
    public Utente(int i, char sex){
        id = i;
        sesso = sex;
        voti = new HashMap<Integer, Double>();
                
    }
    
    /**
     *Restituisce l'id di un utente
     **/
    public int getId(){
        return id;
    }


    
    /**
     *Restituisce il sesso di un utente
     **/
    public char getSesso(){
        return sesso;
    }
    


    /**
     *Restituisce la mappa dei voti dati da un utente
     **/
    public Map<Integer, Double> getVotiUtente(){
        return voti;
    }


    /**
     *Salva, serializza un utente
     **/
    public void salvaUtente(){
        try{
        //System.out.println("Salvo utende con id: " + id + " e sesso: " + sesso);
        String percorso = id + ".dat";
        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(percorso));
        out.writeObject(this);
        out.close();
        }catch(IOException exception){
            System.out.println("Errore processamento file" + exception);
        }        
    }


    /**
     *Inserisce il voto di un utente
     **/
    public void inserisciVoto(int votato, double voto){
        this.voti.put(votato, voto);
        
    }



    /**
     *Calcola il numero dei voti dati da un utente
     **/
    public int getNumVoti(){
        int n = this.voti.size();
        return n;
    }
    
    

    /**
     *Calcola la media dei voti dati da un utente
     **/
    public double getMedia(){
        double somma = 0;
        double media = 0;
        int numVoti = this.voti.size();
        if(numVoti != 0){
            //scorro tutte le chiavi della mappa
            Set<Integer> keySet = voti.keySet();
            for(Integer i : keySet){
                somma = somma + voti.get(i);
            }        
            media = somma/numVoti;
        }/*fine if*/
        return media;
    }
    
    
    /**
     * Verifica se un utente ha votato uno specificato utente
     * @param s utente di cui si deve verificare il voto
     * @return ris un booleano
     */
    public boolean verificaVoto(int s){
        boolean ris = voti.containsKey(s);
        return ris;
    }
    
    
    
    /**
     * recupera uno specifico voto
     * @param k l'id dell'utente di cui recuperare il voto
     * @return 
     */
    public double getVoto(int k){
        return voti.get(k);
    }
    
    
}
